package org.example;


import org.dromara.pdf.fop.core.doc.Document;
import org.dromara.pdf.fop.core.doc.component.block.BlockContainer;
import org.dromara.pdf.fop.core.doc.component.line.SplitLine;
import org.dromara.pdf.fop.core.doc.component.table.Table;
import org.dromara.pdf.fop.core.doc.component.table.TableCell;
import org.dromara.pdf.fop.core.doc.component.table.TableRow;
import org.dromara.pdf.fop.core.doc.component.text.Text;
import org.dromara.pdf.fop.core.doc.page.Page;
import org.dromara.pdf.fop.handler.TemplateHandler;

public class Main {
    public static void main(String[] args) {
        // 定义输出路径
        String outputPath = "D:\\allTest.pdf";

        // 创建标题
        Text title = TemplateHandler.Text.build()
                // 设置id
                .setId("title")
                // 设置文本
                .setText(" 通 知 函")
                // 设置字体大小
                .setFontSize("18pt").setMarginTop("30pt")
                // 设置水平居中
                .setHorizontalStyle("center").setFontFamily("微软雅黑")
                .setFontWeight("bold");
        // 创建扩展文本
       Text number = TemplateHandler.Text.build()
                // 设置字体大小
                .setFontSize("12pt")
                // 设置段前空白
                //.setSpaceBefore("12pt")
                // 设置段前缩进
                //.setStartIndent("60pt")
                // 设置文本间隔
                //.setTextSpacing("80pt")
                .setHorizontalStyle("right").setFontSize("10pt")
                // 设置文本
                .setText("编号(20240415)");
        // 分割线
        SplitLine splitLine =     TemplateHandler.SplitLine.build().setStyle("solid").setLength("100%").setMarginTop("-10pt");

        // 收件人
        Text receiver = TemplateHandler.Text.build()
                // 设置id
                .setId("receiver")
                // 设置文本
                .setText(
                        "韩梅梅:"
                )
                // 设置段前空白
                //.setSpaceBefore("12pt")
                .setFontSize("12pt");

        // 创建内容
        Text text = TemplateHandler.Text.build()
                // 设置id
                .setId("text")
                // 设置文本
                .setText(
                        "贵阳，简称“筑”，别称林城、筑城，贵州省辖地级市、省会、Ⅰ型大城市，国务院批复确定的中国西南地区重要的中心城市之一、" +
                                "重要的区域创新中心和全国重要的生态休闲度假旅游城市。" +
                                "贵阳地处黔中山原丘陵中部，东南与黔南布依族苗族自治州的瓮安、龙里、惠水、长顺4县接壤，" +
                                "西靠安顺市的平坝区和毕节市的织金县，北邻毕节市的黔西市、金沙县和遵义市的播州区，" +
                                "截至2020年，全市下辖6个区、3个县，代管1个县级市。截至2021年末，贵阳市常住人口610.23万人。"  )
                // 设置段前空白
                .setSpaceBefore("8pt")
                .setFontSize("12pt")
                // 设置文本缩进
                .setTextIndent("24pt").setLeading("25px");

        Text notice = TemplateHandler.Text.build()
                // 设置id
                .setId("notice")
                // 设置文本
                .setText(
                        "特此通知！"
                )
                // 设置段前空白
                .setSpaceBefore("12pt").setFontSize("12pt")
                // 设置文本缩进
                .setTextIndent("24pt");

        // 创建内容
        Text remark = TemplateHandler.Text.build()
                // 设置文本
                .setText("小明")
                // 设置字体大小
                .setFontSize("12pt")
                // 设置水平居右
                .setHorizontalStyle("right").setMarginRight("50pt");
        Text signDepartment = TemplateHandler.Text.build()
                // 设置文本
                .setText("三年二班")
                // 设置字体大小
                .setFontSize("12pt")
                // 设置水平居右
                .setHorizontalStyle("right").setMarginRight("40pt");
        Text date = TemplateHandler.Text.build()
                // 设置文本
                .setText("2024年5月20日")
                // 设置字体大小
                .setFontSize("12pt")
                // 设置水平居右
                .setHorizontalStyle("right").setMarginRight("25pt");

        // 创建表格
        Table table = TemplateHandler.Table.build().setHeader(
                // 设置表头
                TemplateHandler.Table.Header.build().addRow(
                        createRow("#7C7D7D", "center", "城市", "市编码", "数量", "金额",
                                "城市1","市编码","数量","单价","金额（元）")
                )
        ).setBody(
                // 设置表格主体
                TemplateHandler.Table.Body.build().addRow(
                        createRow(null, "center", "贵阳市", "520100", "599", "8035","贵阳市", "520100", "599", "8035","100"),
                        createRow(null, "center", "南明区", "520102", "105", "271","贵阳市", "520100", "599", "8035","100"),
                        createRow(null, "center", "云岩区", "520103", "106", "94","贵阳市", "520100", "599", "8035","100"),
                        createRow(null, "center", "花溪区", "520111", "97", "964","贵阳市", "520100", "599", "8035","100"),
                        createRow(null, "center", "乌当区", "520112", "34", "686","贵阳市", "520100", "599", "8035","100"),
                        createRow(null, "center", "白云区", "520113", "46", "270","贵阳市", "520100", "599", "8035","100"),
                        createRow(null, "center", "观山湖区", "520115", "64", "309","贵阳市", "520100", "599", "8035","100"),
                        createRow(null, "center", "清镇市", "520181", "63", "1302","贵阳市", "520100", "599", "8035","100"),
                        createRow(null, "center", "开阳县", "520121", "34", "2026","贵阳市", "520100", "599", "8035","100"),
                        createRow(null, "center", "息烽县", "520122", "22", "1037","贵阳市", "520100", "599", "8035","100"),
                        createRow(null, "center", "修文县", "520123", "29", "1076","贵阳市", "520100", "599", "8035","100"),
                        createEndRow()
                )
        ).setMinRowHeight("30pt").setVerticalStyle("center").setMarginTop("30pt");
        // 创建文档
        Document document = TemplateHandler.Document.build();
        // 创建容器
        BlockContainer container = TemplateHandler.BlockContainer.build();
        // 添加容器内组件
        TableRow tableRow = headerCreateRow();
        Table headerTable = TemplateHandler.Table.build().setBody(
                // 设置表格主体
                TemplateHandler.Table.Body.build().addRow(tableRow)).setHeight("50px").setMarginTop("-10pt");
        container.addComponent(headerTable);
        // 创建页面
        Page page = TemplateHandler.Page.build()
                // 设置页面id
                .setId("pageId")
                // 设置字体
                .setFontFamily("宋体")
                // 设置字体大小
                .setFontSize("15pt")
                // 设置边距（上下左右）
                .setMargin("20pt")
                // 设置页眉高度并添加页眉组件
                .setHeaderHeight("10pt").addHeaderComponent(container)
                // 设置主体内容
                .addBodyComponent(title,number,splitLine,receiver,text,notice,remark,signDepartment,date, table)
                // 设置页脚高度
                .setFooterHeight("20pt")

                // 设置页脚内容
                .addFooterComponent(
                        // 创建块容器并添加内容
                        TemplateHandler.BlockContainer.build().addComponent(
                                // 创建文本
                                TemplateHandler.Text.build().setText("第 "),
                                // 创建当前页码
                                TemplateHandler.CurrentPageNumber.build(),
                                TemplateHandler.Text.build().setText(" 页，共 "),
                                // 创建总页码并设置页面id
                                TemplateHandler.TotalPageNumber.build().setPageId("pageId"),
                                TemplateHandler.Text.build().setText(" 页")
                        ).setHorizontalStyle("center")
                );
        // 添加页面、书签并转换
        document.addPage(page).transform(outputPath);
    }

    private static TableRow createRow(String backgroundColor, String style, String... texts) {
        TableRow row = TemplateHandler.Table.Row.build();
        for (String text : texts) {
            row.addCell(
                    TemplateHandler.Table.Cell.build().addComponent(
                            TemplateHandler.Text.build().setText(text)
                    ).setBorderStyle("solid").setBackgroundColor(backgroundColor).setHorizontalStyle(style)
            );
        }
        row.setFontSize("8pt");
        return row;
    }
    private static TableRow createEndRow() {
        TableRow row = TemplateHandler.Table.Row.build();

        TableCell cell2 = TemplateHandler.Table.Cell.build();
        cell2.addComponent(TemplateHandler.Text.build().setText("合计")).setBorderStyle("solid").setHorizontalStyle("center");
        cell2.setColumnSpan(8);
        row.addCell(cell2);

        TableCell cell3 = TemplateHandler.Table.Cell.build();
        cell3.addComponent(TemplateHandler.Text.build().setText("300")).setBorderStyle("solid").setHorizontalStyle("center");
        row.addCell(cell3);
        row.setFontSize("8pt");


        return row;
    }

    private static TableRow headerCreateRow() {
        TableRow row = TemplateHandler.Table.Row.build();
        TemplateHandler.Image.build();
        row.addCell(
                TemplateHandler.Table.Cell.build().addComponent(
                        // logo图片路径 注意path中的"/"必不可少。这里好像用不了byte构建图像
                        TemplateHandler.Image.build().setPath("/D:\\logoTest.png")
                                // 设置图像宽度
                                .setWidth("65px")
                                // 设置图像高度
                                .setHeight("40px")
                ).setBorderStyle("none").setWidth("450px")
        );
        row.addCell(
                TemplateHandler.Table.Cell.build().addComponent(
                        TemplateHandler.Text.build().setText("互联网联合运营管理总局")
                ).setBorderStyle("none").setWidth("210px").setFontSize("10pt")
        );
        return row;
    }
}